{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2-layer FNN on Cifar\n",
    "\n",
    "This is MLP (784-X^W-10) on MNIST. SGD algorithm (lr=0.1) with 100 epoches.\n",
    "\n",
    " "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import os, sys\n",
    "import numpy as np\n",
    "from matplotlib.pyplot import *\n",
    "import locale\n",
    "locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')\n",
    "\n",
    "import matplotlib.cm as cm\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.font_manager as font_manager\n",
    "import seaborn as sns\n",
    "import itertools\n",
    "\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "\"\"\" Extract final stats from resman's diary file\"\"\"\n",
    "def extract_num(lines0):\n",
    "\n",
    "    valid_loss_str     = lines0[-5]\n",
    "    valid_accuracy_str = lines0[-6]\n",
    "    train_loss_str     = lines0[-8]\n",
    "    train_accuracy_str = lines0[-9]\n",
    "    run_time_str       = lines0[-10]\n",
    "\n",
    "    valid_loss     = float(valid_loss_str.split( )[-1])\n",
    "    valid_accuracy = float(valid_accuracy_str.split( )[-1])\n",
    "    train_loss     = float(train_loss_str.split( )[-1])\n",
    "    train_accuracy = float(train_accuracy_str.split( )[-1])\n",
    "    run_time       = float(run_time_str.split( )[-1])\n",
    "    \n",
    "    return valid_loss, valid_accuracy, train_loss, train_accuracy, run_time\n",
    "\n",
    "\"\"\" Extract number of total parameters for each net config from resman's diary file\"\"\"\n",
    "def parse_num_params(line0):\n",
    "    line_str = ''.join(lines0)\n",
    "    idx = line_str.find(\"Total params\")\n",
    "    param_str = line_str[idx+14:idx+14+20] # 14 is the length of string \"Total params: \"\n",
    "    param_num = param_str.split(\"\\n\")[0]\n",
    "    return int(locale.atof(param_num))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Extract results from diary file\n",
    "\n",
    "    1. Number of params\n",
    "    2. Loss/Accuarcy for training/testing\n",
    "    3. Runing time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "results_dir = '../results/lrb_lenet_cifar_no_dropout'\n",
    "       \n",
    "depth = [2]\n",
    "width = [200]\n",
    "dim_   = [0,600,800,1000,1250,1500,2500,3500,4500,5500,6000,6500,7000,7250,7500,7750,8000,9000,10000,15000]\n",
    "\n",
    "sr=0.9 # solved ratio\n",
    "\n",
    "\n",
    "########## 1. filename list of diary ########################\n",
    "diary_names = []\n",
    "for subdir, dirs, files in os.walk(results_dir):\n",
    "    for file in files:\n",
    "        if file == 'diary':\n",
    "            fname = os.path.join(subdir, file)\n",
    "            diary_names.append(fname)\n",
    "            \n",
    "# print diary_names\n",
    "\n",
    "########## 2. Construct stats (width, depth, dim) ##########\n",
    "# acc_test_all : Tensor (width, depth, dim)\n",
    "# num_param_all: Tensor (width, depth)\n",
    "# acc_solved_all:  Tensor (width, depth)\n",
    "# dim_solved_all:  Tensor (width, depth)\n",
    "############################################################\n",
    "nw, nd, nn= len(width), len(depth), len(dim)\n",
    "\n",
    "acc_test_all  = np.zeros((len(width), len(depth), len(dim)))\n",
    "num_param_all = np.zeros((len(width), len(depth)))\n",
    "acc_solved_all = np.zeros((len(width), len(depth)))\n",
    "dim_solved_all = np.zeros((len(width), len(depth)))\n",
    "\n",
    "mode = 1         # {0: test loss, 1: test acc}\n",
    "error_files = [] #  record the error file\n",
    "\n",
    "# 2.1 construct acc_test_all and num_param_all\n",
    "\n",
    "            \n",
    "# 2.1.1 Read the results \n",
    "ll, ww, dim= depth[0], width[0], []\n",
    "results_ = []\n",
    "for f in diary_names:\n",
    "    fname = f.split('/')[-2]\n",
    "    d = int(fname.split('_')[-1])\n",
    "    dim.append(d)\n",
    "    # print str(d)+'_'+str(ll)+'_'+str(w)\n",
    "\n",
    "    with open(f,'r') as ff:\n",
    "        lines0 = ff.readlines()\n",
    "        try:\n",
    "            R = extract_num(lines0)\n",
    "            R = np.array(R)\n",
    "\n",
    "        except ValueError:\n",
    "            error_files.append((w,ll,d))\n",
    "            R = np.zeros(len(R))\n",
    "            print \"Error. Can not read config: depth %d, width %d and dim %d.\" % (ll, w, d) \n",
    "            # break\n",
    "            \n",
    "    results_.append(R)\n",
    "      \n",
    "idx = np.argsort(np.array(dim)) \n",
    "\n",
    "                   \n",
    "# 2.2 Assign the results, construct acc_solved_all and dim_solved_all           \n",
    "id_w,id_ll = 0,0\n",
    "results = []\n",
    "for id_d in range(len(dim)):\n",
    "    d = dim[id_d]\n",
    "    i = idx[id_d]\n",
    "    results.append(results_[i])\n",
    "    \n",
    "    \n",
    "    if d==0:\n",
    "        test_acc_bl = results_[i][1]        \n",
    "        # print \"Acc goal is: \" + str(test_acc_sl) + \" for network with depth \" + str(ll) + \" width \"+ str(w)\n",
    "    else:\n",
    "        test_acc = r\n",
    "        if test_acc>test_acc_bl*sr:\n",
    "            acc_solved_all[id_w,id_ll]=test_acc\n",
    "            dim_solved_all[id_w,id_ll]=d\n",
    "            # print \"Intrinsic dim is: \" + str(d) + \" for network with depth \" + str(ll) + \" width \"+ str(w)\n",
    "            # print \"\\n\"\n",
    "            # break\n",
    "            \n",
    "results = np.array(results)            \n",
    "\n",
    "########## 3. Construct Tensors for Analysis (width, depth, dim) ##########                    \n",
    "acc_base  = acc_test_all[:,:,0]\n",
    "acc_solve = acc_base*sr\n",
    "                                       "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(30, 5)\n",
      "[    0    10    50   100   250   500   750  1000  1250  1500  1750  2000\n",
      "  2500  3000  4000  5000 10000 15000 16000 17000 18000 19000 20000 21000\n",
      " 25000 30000 35000 40000 45000 50000]\n",
      "Baseline results\n",
      "0.4857\n",
      "# Parmas\n",
      "[[ 0.]]\n",
      "Cross-line results\n",
      "[[ 0.]]\n",
      "Cross-line Dim\n",
      "[[ 0.]]\n",
      "Dim 50000 results\n",
      "[[ 0.]]\n"
     ]
    }
   ],
   "source": [
    "dim = np.sort(dim)\n",
    "print results.shape\n",
    "print dim\n",
    "\n",
    "print \"Baseline results\"\n",
    "print test_acc_bl\n",
    "\n",
    "print \"# Parmas\"\n",
    "print num_param_all\n",
    "\n",
    "print \"Cross-line results\"\n",
    "print acc_solved_all\n",
    "\n",
    "print \"Cross-line Dim\"\n",
    "print dim_solved_all\n",
    "\n",
    "print \"Dim %d results\" % dim[-1]\n",
    "print acc_test_all[:,:,-1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### List the config of depth and width, which yields errors in training"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Error in the following configs: width, depth and dim\n",
      "[]\n",
      "[]\n",
      "[]\n",
      "Shape of accuracy tensor: (1, 1, 19)\n"
     ]
    }
   ],
   "source": [
    "E_width, E_depth, E_dim = [],[],[]\n",
    "for item in error_files:\n",
    "    E_width.append(item[0]) \n",
    "    E_depth.append(item[1])\n",
    "    E_dim.append(item[2])\n",
    "\n",
    "str_E_width = \"\".join(str(E_width)).replace(',', '')\n",
    "str_E_depth = \"\".join(str(E_depth)).replace(',', '')\n",
    "str_E_dim   = \"\".join(str(E_dim)).replace(',', '')\n",
    "\n",
    "print \"Error in the following configs: width, depth and dim\"\n",
    "print str_E_width\n",
    "print str_E_depth\n",
    "print str_E_dim\n",
    "\n",
    "print \"Shape of accuracy tensor: \" + str(acc_test_all.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "-------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Check the accuracy of specific depth and width, along different dim"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def check_cfg_results (depth, width, lines0): \n",
    "    for d in dim:\n",
    "        # 1. read the results\n",
    "        for f in diary_names:\n",
    "            if '_'+str(d)+'_'+str(depth)+'_'+str(width)+'/' in f:\n",
    "                # print \"%d is in\" % d + f\n",
    "                diary_names_ordered.append(f)\n",
    "                with open(f,'r') as ff:\n",
    "                    lines0 = ff.readlines()\n",
    "                    try:\n",
    "                        # print lines0\n",
    "                        param_num = parse_num_params(lines0)\n",
    "                        R = extract_num(lines0)\n",
    "                        print R[1]\n",
    "\n",
    "                    except ValueError:\n",
    "                        print \"Error: Can not read\"\n",
    "                        break                                               "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Reshape the tensor to 1D for plots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Testing Accuracy wrt. Width, Depth and Dim"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7fdf060c74d0>"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABIoAAAFECAYAAABIy9WWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xu8lXWZ8P/PtTfno3hgi4CAhCKebaeplWh5zjSzEe3p\n4GNDPZOljjOTOf5qxjmkNdVPHTswkzY1pU+eGirStNpZeYIcE0FFRA2QQELFDQhs1vX8sRfNZgvs\nvWCd9ubzfr3uF+u+7+9939fitd2sdXl9r29kJpIkSZIkSVJDrQOQJEmSJElSfTBRJEmSJEmSJMBE\nkSRJkiRJkopMFEmSJEmSJAkwUSRJkiRJkqQiE0WSJEmSJEkCKpgoioibImJFRDyxjfMREddHxMKI\neDwijqxULJIkSZIk9VYRMTYifhER8yNiXkRcspUxHyh+954bEQ9ExGEdzp0aEU8Xv59fUd3oVW8q\nWVH0LeDU7Zw/DZhU3KYDX6tgLJIkSZIk9VZtwOWZOQV4K/CJiJjSacxzwPGZeQjwD8AMgIhoBG6k\n/Tv6FOD8rVyrXUjFEkWZeT+wajtDzgK+ne0eAnaLiFGVikeSJEmSpN4oM5dl5qPF168BTwKjO415\nIDNfLu4+BIwpvj4KWJiZizJzA3Ar7d/XtYvqU8NnjwYWd9hfUjy2rPPAiJhOe9URAwcOfPPYsWOr\nEqCk3qtQKNDQYJs2SZK0fX5mqL4FCxaszMy9ah1HpZxywuD846pNJV3z28fXzwNe73BoRmbO2NrY\niBgPHAE8vJ1bXgT8pPh6a9/Njy4pQPUqtUwUdVvxP4AZAM3NzTlnzpwaRySpp2tpaWHq1Km1DkOS\nJNU5PzNUX0S8UOsYKumPqzbxyD37lnRN46hnXs/M5q7GRcQQ4A7g0sxcvY0xJ9CeKHpbSUFol1HL\nRNFSoGNp0JjiMUmSJEmSeqUEChTKft+I6Et7kui7mXnnNsYcCvw7cFpm/rF42O/m2kItayhnAh8q\nrn72VuDVzHzDtDNJkiRJknqPZFMWStq6EhEBfBN4MjO/vI0x+wJ3Ah/MzAUdTs0GJkXEhIjoB0yj\n/fu6dlEVqyiKiFuAqcCeEbEE+BzQFyAzvw7MAk4HFgJrgQsrFYskSZIkSfWgvaIoy33b44APAnMj\n4rHisSuBfeFP38E/C+wBfLU9r0RbZjZnZltEXAzcAzQCN2XmvHIHqJ6jYomizDy/i/MJfKJSz5ck\nSZIkqR6Ve+pZZv4aiC7GfBT46DbOzaK9mKPHiogR48ePv3LQoEEH0cXfxS4u165dO+/555//5w6r\n4G2hRzSzliRJkiSpN0iSTVn2iqJd3vjx46/89Kc/PfnCCy9c0r9/f/+Ct2H9+vVx8803T7722muv\nBP56a2Nc51GSJEmSpCoqkCVt6tqgQYMOuvDCC5eZJNq+/v3754UXXrisWHm1VVYUSZIkSZJUJQls\nMvlTCWGSqHuKf0/bnJ5nokiSJEmSpCqySkj1zESRJEmSJElVkmCPItU1E0WSJEmSJFVRedc8k8rL\nRJEkSZIkSVWSpD2KVNdMFEmSJEmSVC0Jm8wTqY411DoASZIkSZIk1QcriiRJkiRJqpLEHkWqb1YU\nSZIkSZJUNcGmEjeV14ABA/53rWPo6EMf+lDzzTffPLrz8f/8z/8c1dzcfOrm17fffnvT5nPvete7\npn7pS1+aUIl4rCiSJEmSJKlKEijYo6jXKhQKFAoF+vTpfrrl29/+9pyuxtx33337DB48eOO55567\nfKcC7AYriiRJkiRJqiIriurDypUr+xxyyCHvnjBhwjljx4499/rrrx8H7RU+l1xyySGbx33gAx94\ny6WXXnowwF/8xV8cNnHixPfuu+++5374wx9+M8Cjjz46ZNSoUeedeOKJJ+y7777vf+KJJ4Zsvnbm\nzJl7HXPMMScDXH/99eP69et30dq1axtWr17dOHLkyPNhy+qgf/u3fxuzzz77/NmECRPOuf322yds\nvv9dd9015Xvf+96h48aNe9+tt966N8CvfvWrUfvvv/9ZI0eOPL+c1UUmiiRJkiRJqpLERFG9GDp0\n6Kb77rvvnueee+7OX/3qVz/6p3/6p2MKhQKXXnrpUzNnzpwE0NbWxn333Tfxsssue+ab3/zmmOee\ne27YM888c9eiRYtunzdv3l633HLL3gDLly8ffvHFF89bsmTJbYcffnjr5meccsopK5999tk9oD2x\nM3bs2FU/+tGP9vrhD384cvLkySs6xrN69erGK6644vg77rjj7mefffbOlStXDgI48sgjW9/73vfO\nv+CCCx5/4YUX7pg2bdofAF566aVB8+fP/6/vf//7P/nCF75wdLn+Xpx6JkmSJElSFRXS5E89KBQK\n8ed//udHPfbYY6MiIl9++eXBCxcuHHjkkUe2Dhs2bP1PfvKTPZYsWTJw4sSJfxw3btz6u+++e8yc\n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\n/wCPxPZDZq1s+QAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fdf058a9950>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.cm as cm\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.font_manager as font_manager\n",
    "import seaborn as sns\n",
    "\n",
    "plt.figure(figsize=(20,5.0))\n",
    "\n",
    "for i in range(acc_test_all.shape[2]):\n",
    "    acc = acc_test_all[:,:,i].reshape(len(depth)*len(width),order='F')\n",
    "    if i==0:\n",
    "        plt.scatter(fig_params_1d, acc, s=(np.array(fig_width)**1.8)/100, c=fig_depth, edgecolors='k') \n",
    "        plt.scatter(fig_params_1d, sr*acc, marker=\"_\", s=300, c='k', edgecolors='r') \n",
    "    else:\n",
    "        plt.scatter(fig_params_1d, acc, s=(np.array(fig_width)**1.8)/100, c=fig_depth, facecolors='None', linewidth=np.array(dim[i])/300.0) \n",
    "\n",
    "        \n",
    "ax = plt.gca()\n",
    "plt.colorbar(label=\"Depth\")\n",
    "\n",
    "ax.set_xscale('log')\n",
    "ax.grid(True)\n",
    "\n",
    "ax.set_ylim(0.1, 1.0)\n",
    "ax.set_xlim(0.3E5, 1.5E6)\n",
    "\n",
    "plt.xlabel('# parameters')\n",
    "plt.ylabel('# accuracy')\n",
    "\n",
    "#make a legend:\n",
    "pws = width\n",
    "for pw in pws:\n",
    "    plt.scatter([], [], s=(pw**1.8)/1000, c=\"k\",label=str(pw))\n",
    "\n",
    "h, l = plt.gca().get_legend_handles_labels()\n",
    "plt.legend(h[0:], l[0:], labelspacing=1.2, title=\"layer width\", borderpad=1, loc='best', bbox_to_anchor=(1.25, 1),\n",
    "             frameon=True, framealpha=0.6, edgecolor=\"k\", facecolor=\"w\")\n",
    "\n",
    " \n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Testing Accuracy of Intrinsic dim for #parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7fdf05108550>"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABCAAAAFECAYAAAD2sU+OAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xu0XWV97//3JyEk3KWiaAMIgShEQIgR8IIGEUFbwaK1\nqBXlYpSjR61yWowXepSfxePwQhXBHOEHWCu1FoW2yMVCGqgg4R7CRWJASESQi0DEBJL9PX+slXQT\n920la619e7/GmGOvOeczn/mda5A95v7yfZ4nVYUkSZIkSVInTRjuACRJkiRJ0thnAkKSJEmSJHWc\nCQhJkiRJktRxJiAkSZIkSVLHmYCQJEmSJEkdZwJCkiRJkiR1XMcSEEnOTvJQktv6OZ8kf59kSZJb\nk8zsVCySJEmSJI1VSXZMcmWS25MsTvLRPtq8u/m396IkP03ysl7nDktyV/Pv85M6FWcnKyDOAQ4b\n4PybgOnNbQ5wRgdjkSRJkiRprFoNfKKqZgAHAB9KMmO9NvcAr6uqvYDPA/MAkkwETqfxN/oM4J19\nXNsWHUtAVNUC4NEBmhwBnFcN1wLPSfLCTsUjSZIkSdJYVFUPVNWNzc9PAncAU9dr89Oqeqy5ey2w\nQ/PzfsCSqlpaVU8D59P4e73tNulEp0M0Fbi/1/6y5rEH1m+YZA6NKgk222yzl++4445dCVDS2NXT\n08OECU6DI0mSBuY7Q/f9/Oc/f7iqnjfccXTKoQdtUY88uqala264ddViYGWvQ/Oqal5fbZPsDOwL\n/GyALo8Dftz83Nff5vu3FOAQDWcCYsiaX+w8gFmzZtX1118/zBFJGu3mz5/P7NmzhzsMSZI0wvnO\n0H1JfjncMXTSI4+u4bpLd2rpmokvvHtlVc0arF2SLYF/AT5WVU/00+YgGgmI17QURBsMZwJiOdC7\nlGGH5jFJkiRJksakAnroaXu/SSbRSD58t6ou6KfN3sC3gTdV1SPNw13723w4a4kuAo5uroZxAPB4\nVf3B8AtJkiRJksaOYk31tLQNJkmAs4A7quor/bTZCbgAeE9V/bzXqYXA9CS7JNkUOIrG3+tt17EK\niCTfA2YD2yVZBpwMTAKoqjOBi4E3A0uAp4BjOhWLJEmSJEkjQaMCotrd7auB9wCLktzcPDYX2AnW\n/Q3+WeC5wDcb+QpWV9Wsqlqd5MPApcBE4OyqWtzuAKGDCYiqeucg5wv4UKfuL0mSJEnd9thjj3HG\nGWdw33330fiTR31Jwk477cQJJ5zAtttuO9zhdF27h2BU1dVABmlzPHB8P+cuplEk0FGjYhJKSZIk\nSRoNzjjjDPbdd1/++q//mk028c+t/qxevZrLL7+cM844g7lz5w53OF1VFGvGaXLK9WQkSZIkqU3u\nu+8+DjnkEJMPg9hkk0045JBDuO+++4Y7lGHRQ7W0jRX+q5AkSZKkNqkqkw9DtMkmm4zLYSoFrBlD\nSYVW+C9DkiRJkqQuGktVDa0wASFJkiRJUpcUjNs5IExASJIkSZLURe1dA2P0MAEhSZIkSVKXFOUc\nEJIkSZIkqcMK1ozP/IPLcEqSJEmSpM6zAkKSJEmSpC4pxu8cEFZASJIkSdIw2HLLLYc7hGf57Gc/\ny09+8pM/OD5//nz+9E//dN3nn/70p+vOve997+MHP/hB12IcG8KaFrexwgoISZIkSRpjqoqqYsKE\nof8/58997nODtpk/fz5bbrklr3rVqzYmvHGtgB7ngJAkSZIkdduKFSs4+OCDmTlzJnvttRcXXngh\n0KhI+NrXvrau3ac+9SlOO+00AL70pS/xile8gr333puTTz4ZgHvvvZeXvOQlHH300ey5557cf//9\n665duHAhRx55JAAXXnghm222GU8//TQrV65k2rRpwLOrGS655BJ23313Zs6cyQUXXLCu/zPPPJOv\nfvWr7LPPPlx11VUALFiwgFe96lVMmzbNaoghsgJCkiRJktR1U6ZM4Yc//CFbb701Dz/8MAcccACH\nH344xx57LEceeSQf+9jH6Onp4fzzz+e6667jsssu4+677+a6666jqjj88MNZsGABO+20E3fffTfn\nnnsuBxxwwLPuse+++3LzzTcDcNVVV7HnnnuycOFCVq9ezf777/+stitXruT9738/V1xxBbvttht/\n8Rd/AcDOO+/MBz/4QbbccktOPPFEAM466yweeOABrr76au68804OP/xw3v72t3fhWxu9CsZUUqEV\nJiAkSZIkaRhVFXPnzmXBggVMmDCB5cuX8+CDD7Lzzjvz3Oc+l5tuuokHH3yQfffdl+c+97lcdtll\nXHbZZey7775Ao4Li7rvvZqedduJFL3rRHyQfADbZZBN23XVX7rjjDq677jo+/vGPs2DBAtasWcOB\nBx74rLZ33nknu+yyC9OnTwfgL//yL5k3b16/8b/1rW9lwoQJzJgxgwcffLCN38zY1VMmICRJkiRJ\nXfbd736X3/zmN9xwww1MmjSJnXfemZUrVwJw/PHHc8455/DrX/+aY489FmgkLD75yU/ygQ984Fn9\n3HvvvWyxxRb93ue1r30tP/7xj5k0aRJveMMbeN/73seaNWv40pe+tFHxT548ed3nqnE6uUELxnMF\nhHNASJIkSdIwevzxx3n+85/PpEmTuPLKK/nlL3+57tyf/dmfcckll7Bw4UIOPfRQAA499FDOPvts\nVqxYAcDy5ct56KGHBr3PgQceyNe+9jVe+cpX8rznPY9HHnmEu+66iz333PNZ7XbffXfuvfdefvGL\nXwDwve99b925rbbaiieffHKjn3k8K8IaJrS0jRVWQEiSJEnSMHr3u9/NW97yFvbaay9mzZrF7rvv\nvu7cpptuykEHHcRznvMcJk6cCMAb3/hG7rjjDl75ylcCjeU8/+Ef/mHd+f7sv//+PPjgg7z2ta8F\nYO+99+bXv/41ybP/b/yUKVOYN28ef/Inf8Lmm2/OgQceuC7p8Ja3vIW3v/3tXHjhhXz9619v23cw\n3jgEQ5IkSZLUNWsrGLbbbjuuueaaPtv09PRw7bXX8s///M/POv7Rj36Uj370o3/Q/rbbbuv3fptt\nthmrVq1at7/+vA7nnHPOus+HHXYYd9555x/08eIXv5hbb7113f7680esfSb1zyEYkiRJkqQR5fbb\nb2e33Xbj4IMPXjchpMaCsKYmtLSNFVZASJIkSdIINGPGDJYuXTrcYajNCugZp7UAJiAkSZIkSeqi\n8ToEwwSEJEmSJEldUpUxNayiFSYgJEmSJEnqoh4rICRJkiRJUic1VsEYnxUQ4/OpJUmSJEkaFu1f\nBSPJjkmuTHJ7ksVJ/mCN1iS7J7kmyaokJ6537t4ki5LcnOT6Nj7ss1gBIUmSJEnS6LYa+ERV3Zhk\nK+CGJJdX1e292jwKfAR4az99HFRVD3cySCsgJEmSJEnqkrXLcLayDdpn1QNVdWPz85PAHcDU9do8\nVFULgWc68FhDYgWEJEmSJEldtKZanoRyu/WGRsyrqnl9NUyyM7Av8LMW+i/gsiQFfKu/vjeWCQhJ\nkiRJkrqkyIZMQvlwVc0arFGSLYF/AT5WVU+00P9rqmp5kucDlye5s6oWtBrkYByCIUmSJElSF/XU\nhJa2oUgyiUby4btVdUEr8VTV8ubPh4AfAvu1+EhDYgJCkiRJkka4ZcuWMXfuXKZNm8Z2223HtGnT\n+NSnPsWyZcuGOzS1aO0ynK1sg0kS4Czgjqr6SivxJNmiOXElSbYA3gjc1vqTDc4EhCRJkiSNUFXF\n5z//eaZPn85XvvIV7rnnHh555BHuuecevvzlLzN9+nQ+//nPU1Ut933//fdz0EEHMWPGDF760pdy\n2mmnAfDoo49yyCGHMH36dA455BAee+yxdbF85CMfYbfddmPvvffmxhtvbOuzjhdFWFOtbUPwauA9\nwOubS2nenOTNST6Y5IMASV6QZBnwceDTSZYl2RrYHrg6yS3AdcC/V9UlnXh254CQJEmSpBHqlFNO\n4dRTT2XlypV/cG7VqlUAnHrqqQB85jOfaanvTTbZhC9/+cvMnDmTJ598kpe//OUccsghnHPOORx8\n8MGcdNJJnHrqqZx66ql88Ytf5Mc//jF33303d999Nz/72c844YQT+NnPWpnnUGsNZWWLVlTV1cCA\nmYqq+jWwQx+nngBe1taA+mEFhCRJkiSNQMuWLeMLX/gCTz311IDtnnrqKb7whS+wfPnylvp/4Qtf\nyMyZMwHYaqut2GOPPVi+fDkXXngh733vewF473vfy49+9CMALrzwQo4++miScMABB/Db3/6WBx54\nYAOebHyrgjU1oaVtrBg7TyJJkiRJY8g3v/nNIQ+tqCrOOOOMDb7Xvffey0033cT+++/Pgw8+yAtf\n+EIAXvCCF/Dggw8CsHz5cnbcccd11+ywww4tJz0EEHpa3MYKExCSJEmSNAKdf/7564ZZDGbVqlX8\n4z/+4wbdZ8WKFbztbW/ja1/7GltvvfWzziWhMb+h2qWwAkKSJEmSNII88cQTLbV/8sknW77HM888\nw9ve9jbe/e53c+SRRwKw/fbbrxta8cADD/D85z8fgKlTp3L//fevu3bZsmVMnTq15Xuq/atgjBZj\n50kkSZIkaQxZvxphMFtttVVL7auK4447jj322IOPf/zj644ffvjhnHvuuQCce+65HHHEEeuOn3fe\neVQV1157Ldtss826oRoauiL0VGvbWGECQpIkSZJGoKOOOorJkycPqe3kyZN517ve1VL///Vf/8V3\nvvMdrrjiCvbZZx/22WcfLr74Yk466SQuv/xypk+fzk9+8hNOOukkAN785jczbdo0dtttN97//vfz\nzW9+s+VnUsN4rYBwGU5JkiRJGoH+x//4H3z1q18dUtsknHDCCS31/5rXvKbfSS7/4z/+o897nH76\n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\nyCAqHm7YAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fdf05470ad0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(20,5))\n",
    "\n",
    "\n",
    "plt.scatter(fig_params_1d, acc_solved_all_1d, s=(np.array(fig_width)**2.0)/100, c=fig_depth, edgecolors='k') \n",
    "\n",
    "ax = plt.gca()\n",
    "plt.colorbar(label=\"Depth\")\n",
    "\n",
    "ax.set_xscale('log')\n",
    "ax.grid(True)\n",
    "\n",
    "ax.set_ylim(0.0, 1.0)\n",
    "ax.set_xlim(0.3E5, 1.5E6)\n",
    "\n",
    "\n",
    "plt.xlabel('# parameters')\n",
    "plt.ylabel('# accuracy')\n",
    "\n",
    "#make a legend:\n",
    "pws = width\n",
    "for pw in pws:\n",
    "    plt.scatter([], [], s=(pw**1.8)/100, c=\"k\",label=str(pw))\n",
    "\n",
    "h, l = plt.gca().get_legend_handles_labels()\n",
    "plt.legend(h[0:], l[0:], labelspacing=1.2, title=\"layer width\", borderpad=1, \n",
    "            frameon=True, framealpha=0.6, edgecolor=\"k\", facecolor=\"w\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Intrinsic dim for #parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Performance comparison with Baseline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f6d59288550>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nqBBCuOn/A5TS2iUpMqrlAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f6d595d5c10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "nn = len(dim)-1\n",
    "fig, ax = subplots(figsize=(5,4))\n",
    "ax.plot(dim[1:], results[1:,3], label=\"Train\")\n",
    "ax.plot(dim[1:], results[1:,1], label=\"Test\")\n",
    "ax.plot(dim[1:], results[0,3]*np.ones(nn),'b-.', label=\"Train: baseline\")\n",
    "ax.plot(dim[1:], results[0,1]*np.ones(nn),'r-.', label=\"Test: baseline\")\n",
    "ax.set_xlabel('Intrinsic Dim')\n",
    "ax.set_ylabel('Accuracy')\n",
    "plt.grid()\n",
    "ax.set_xlim([0,50000])\n",
    "# ax.set_ylim([0.05,0.8])\n",
    "plt.legend(labelspacing=0.0, borderpad=0.1,edgecolor=\"k\", facecolor=\"w\")\n",
    "fig.savefig(\"figs/lenet_cifar_l2_train_testacc.pdf\", bbox_inches='tight')\n",
    "\n",
    "fig, ax = subplots(figsize=(5,4))\n",
    "ax.plot(dim[1:], results[1:,2], label=\"Train\")\n",
    "ax.plot(dim[1:], results[1:,0], label=\"Test\")\n",
    "ax.plot(dim[1:], results[0,2]*np.ones(nn),'b-.', label=\"Train: baseline\")\n",
    "ax.plot(dim[1:], results[0,0]*np.ones(nn),'r-.', label=\"Test: baseline\")\n",
    "ax.set_xlabel('Intrinsic Dim')\n",
    "ax.set_ylabel('NLL')\n",
    "plt.grid()\n",
    "ax.set_xlim([0,50000])\n",
    "# ax.set_ylim([0.75,2.5])\n",
    "plt.legend(labelspacing=0.0, borderpad=0.1,edgecolor=\"k\", facecolor=\"w\")\n",
    "fig.savefig(\"figs/lenet_cifar_l2_train_test_nll.pdf\", bbox_inches='tight')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
